import { _decorator, Component, Node } from 'cc';

const { ccclass, property } = _decorator;

/**
 * 通用Component拓展
 * 拓展了一些开发常用的接口
 */
@ccclass('ComponentExt')
export abstract class ComponentExt extends Component {

    /////////////////////////// games.ui.IPublicUI  -- start -- //////////////////////////////////////
    getNode(): Node {
        return this.node;
    }

    getElement(type?: any) {
    }

    /////////////////////////// games.ui.IPublicUI  -- end -- //////////////////////////////////////

    /**
     * 初始化
     * @warn 子类如果需要请 override
     */
    init(...args: any[]) {

    }

    /**
     * 关闭UI暂无特效需求，可由子类添加
     */
    onClose() {
        this.visible = false;
    }

    /**
     * 检查组件所在节点是否激活状态
     */
    public get isActive(): boolean {
        return this.isNodeValid && this.node.activeInHierarchy;
    }

    /**
     * 检查组件所在节点是否有效
     */
    public get isNodeValid(): boolean {
        return !!this && this.isValid && !!this.node && this.node.isValid;
    }

    /**
     * 节点是否可见
     * @type {boolean}
     */
    public get visible(): boolean {
        return this.isActive;
    }

    /**
     * 设置节点是否可见
     */
    public set visible(value: boolean) {
        if (this.isNodeValid && this.visible != value) {
            this.node.active = value;
        }
    }

}

